﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace JHQC
{
    internal class Decorder
    {
        private double to_digi(string hex_str)
        {
            int hexValue = Convert.ToInt32(hex_str, 16);
            int _num = hexValue & 0x0FFF;
            int _digiShift = (hexValue & 0xF000) >> 14;
            double _digi = Math.Pow(10, -_digiShift);
            return _num * _digi;
        }
        private Dictionary<string, object> decode_data(string data_str)
        {
            // 定义结果字典
            Dictionary<string, string> result_dict = new Dictionary<string, string>
        {
            { "05", "合格" },
            { "06", "不合格" },
            { "07", "空" },
            { "08", "终止" }
        };

            // 初始化数据字典
            Dictionary<string, object> data = new Dictionary<string, object>
        {
            { "STEP", data_str.Substring(2, 2) },
            { "NAME", data_str.Substring(4, 2) },
            { "RESULT", data_str.Substring(6, 2) }
        };

            // 根据结果码获取对应的结果描述
            string resultKey = data["RESULT"].ToString();
            if (!result_dict.TryGetValue(resultKey, out string resultValue))
            {
                resultValue = "空";
            }
            data["RESULT"] = resultValue;

            // 根据名称码进行不同的处理
            string name = data["NAME"].ToString();
            if (name == "00")
            {
                data["NAME"] = "空";
            }
            else if (name == "01")
            {
                data["NAME"] = "耐压";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电流" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
            }
            else if (name == "02")
            {
                data["NAME"] = "接地";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电流" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电阻" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
            }
            else if (name == "03")
            {
                data["NAME"] = "绝缘";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电阻" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
            }
            else if (name == "04")
            {
                data["NAME"] = "泄漏";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "对火线电流" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "对地电流" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
                data["D4"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(20, 4)) } };
            }
            else if (name == "05")
            {
                data["NAME"] = "功率";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电流" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "功率" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
                data["D4"] = new Dictionary<string, object> { { "ITEM", "功率因素" }, { "VALUE", to_digi(data_str.Substring(20, 4)) } };
                data["D5"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(24, 4)) } };
            }
            else if (name == "06")
            {
                data["NAME"] = "启动";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电流" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
            }
            else if (name == "07")
            {
                data["NAME"] = "开短";
                data["D1"] = new Dictionary<string, object> { { "ITEM", "电压" }, { "VALUE", to_digi(data_str.Substring(8, 4)) } };
                data["D2"] = new Dictionary<string, object> { { "ITEM", "电流" }, { "VALUE", to_digi(data_str.Substring(12, 4)) } };
                data["D3"] = new Dictionary<string, object> { { "ITEM", "时间" }, { "VALUE", to_digi(data_str.Substring(16, 4)) } };
            }

            return data;
        }
        public string make_json(string str_context, string qr)
        {
            int seg_len = 28; // 每段长度
            Dictionary<string, object> data = new Dictionary<string, object>
        {
            { "QR", qr },
            { "C", new List<Dictionary<string, object>>() }
        };

            for (int i = 0; i < 6; i++)
            {
                int startIndex = i * seg_len;
                if (startIndex + seg_len <= str_context.Length)
                {
                    string item_str = str_context.Substring(startIndex, seg_len);
                    Dictionary<string, object> item = decode_data(item_str);
                    if (item["NAME"].ToString() != "空")
                    {
                        ((List<Dictionary<string, object>>)data["C"]).Add(item);
                    }
                }
            }

            string msg = JsonConvert.SerializeObject(data);
            return msg;
        }
    }
}
